package com.define.ssh.service;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;

import com.define.ssh.util.Pager;
import com.sxit.ecwx.core.utils.Formatu;

/**
 * Service接口 - Service接口基类
 */

public interface BaseService<T, PK extends Serializable> {

	/**
	 * 根据ID获取实体对象
	 * 
	 * @param id
	 *            记录ID
	 * @return 实体对象
	 */
	public T get(PK id);

	/**
	 * 根据ID获取实体对象
	 * 
	 * @param id
	 *            记录ID
	 * @return 实体对象
	 */
	public T load(PK id);

	/**
	 * 获取所有实体对象集合
	 * 
	 * @return 实体对象集合
	 */
	public List<T> getAllList();

	/**
	 * 获取所有实体对象总数
	 * 
	 * @return 实体对象总数
	 */
	public Long getTotalCount();

	/**
	 * 保存实体对象
	 * 
	 * @param entity
	 *            对象
	 * @return ID
	 */
	public PK save(T entity);

	/**
	 * 更新实体对象
	 * 
	 * @param entity
	 *            对象
	 */
	public void update(T entity);

	/**
	 * 删除实体对象
	 * 
	 * @param entity
	 *            对象
	 * @return
	 */
	public void delete(T entity);

	/**
	 * 根据ID删除实体对象
	 * 
	 * @param id
	 *            记录ID
	 */
	public void delete(PK id);

	/**
	 * 根据ID数组删除实体对象
	 * 
	 * @param ids
	 *            ID数组
	 */
	public void delete(PK[] ids);

	/**
	 * 刷新session
	 * 
	 */
	public void flush();

	/**
	 * 清除对象
	 * 
	 * @param object
	 *            需要清除的对象
	 */
	public void evict(Object object);

	/**
	 * 清除Session
	 * 
	 */
	public void clear();

	/**
	 * 根据Pager进行查询(提供分页、查找、排序功能)
	 * 
	 * @param pager
	 *            Pager对象
	 * 
	 * @return Pager对象
	 */
	public Pager findPager(Pager pager);

	/**
	 * 根据Pager、Criterion进行查询(提供分页、查找、排序功能)
	 * 
	 * @param pager
	 *            Pager对象
	 * 
	 * @param criterions
	 *            Criterion数组
	 * 
	 * @return Pager对象
	 */
	public Pager findPager(Pager pager, Criterion... criterions);

	/**
	 * 根据Pager、Criterion进行查询(提供分页、查找、排序功能)
	 * 
	 * @param pager
	 *            Pager对象
	 * 
	 * @param orders
	 *            Order数组
	 * 
	 * @return Pager对象
	 */
	public Pager findPager(Pager pager, Order... orders);

	/**
	 * 根据Pager、Criteria进行查询(提供分页、查找、排序功能)
	 * 
	 * @param pager
	 *            Pager对象
	 * 
	 * @param criteria
	 *            Criteria对象
	 * 
	 * @return Pager对象
	 */
	public Pager findPager(Pager pager, Criteria criteria);

	/**
	 * 获取所有对象的集合
	 * 
	 * @param hashMap
	 *            参数值
	 * @return
	 */
	public List<T> getAllListByParameter(HashMap<String, Object> hashMap);

	/**
	 * 返回符合条件的记录列表
	 * 
	 * @param dc
	 * @return list
	 */
	public List findByCriteria(final DetachedCriteria dc);

	/**
	 * 搜索指定数量的数据
	 * 
	 * @param dc
	 * @param count
	 * @return
	 */
	public List findByCriteria(final DetachedCriteria dc, final int count);
	
	
	
	/**
	 * 
	 * @param query
	 * @return list
	 */
	public List findByQuery(final String query);

	/**
	 * 
	 * @param query
	 * @param parameter
	 * @return list
	 */
	public List findByQuery(final String querySql, final Object parameter);

	/**
	 * @param query
	 * @param parameter
	 * @return
	 */
	public List findByQuery(final String querySql, final Object[] parameter);
	
	
	/**
	 * 跟服务器通讯接口
	 * @param modfiytime
	 * @param table
	 * @param commond
	 * @return
	 */
	public int  connectInterfce(String table,int commond,int time);
	public int  sendMsg(byte[] by,int commond);
	
	public  Date getUpdateTime(String table);
	public  Date getUpdateFiled(String table,String filed);
}